#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>  // stat()
#include <fcntl.h>

int main(int argc, char *argv[])
{
	// int stat(const char *pathname, struct stat *buf);
	// struct stat *buf 是一个传出参数
	struct stat sbuf;

	int ret = lstat(argv[1], &sbuf);
	if (ret == -1) {
		perror("stat error");
		exit(1);
	}

	// 获取文件大小
	printf("file size: %ld\n", sbuf.st_size);

	if (S_ISREG(sbuf.st_mode)) {  // 是否为普通文件
		printf("It's a regular\n");
	} else if (S_ISDIR(sbuf.st_mode)) {  // 是否为目录
		printf("It's a dir\n");
	} else if (S_ISFIFO(sbuf.st_mode)) {  // 是否为管道
		printf("It's a pipe\n");
	} else if (S_ISLNK(sbuf.st_mode)) {  // 是否为软链接
		printf("It's a soft link\n");
	}

	return 0;
}
